// pages/deal/deal.js
const db = wx.cloud.database()
var startPoint
Page({

  /**
   * 页面的初始数据
   */
  data: {
    goodsList: [],  //存放商品列表
    page: 1,  // 请求第几页的数据
    pageSize: 10, // 一页多少条数据
    total: 0, // 总数据条数
    isloading: false, // 判断下拉标志

    is_empty: false, // 判断搜索内容是否为空
    name: '', // 保存搜索内容

    rankAsTime: '按时间 降序',
    rankway: 'desc',

    rankTag: '全部分类',
    isClassify: false, // false隐藏分类下拉框，true出现下拉框 
    tags:['全部分类',
    '优惠券码',
    '电子产品',
    '二手书籍',
    '饮料零食',
    '骑行载具',
    '模型手办',
    '日用家具',
    '装饰摆件',
    '虚拟产品',
    '娱乐用品',
    '其他']

  },

  //搜索框搜索内容，按下回车后搜索
  Search_Item:function (e) {
    let name = e.detail.value
    if(!name){
      this.onLoad()
    }
    let that = this
    db.collection('Goods')
    .where({
      name:db.RegExp({
        regexp: '.*' + name + '.*',//做为关键字进行匹配
        options: 'i',//不区分大小写
      })
    })
    .get({
      success: function(res) {
        if(res.data.length != 0){
          that.setData({
            name:name,
            goodsList: res.data,
            is_empty:false
          })
        }else{
          that.setData({
            goodsList: res.data,
            is_empty:true
          })
        }
      }
    })
  },

  // 以分页形式从云数据库中获取商品列表数据
  getGoodsList(cb){
    // 设置节流（防止短时间内多次上拉页面）
    this.setData({
      isloading: true
    })
    // 展示loading效果
    wx.showLoading({
      title: '正在加载',
    })

    if(this.data.rankTag!='全部分类'){
      // 从云请求数据
      db.collection('Goods')
      .orderBy('time', this.data.rankway)   // 默认按时间正序排列
      .skip((this.data.page-1)*this.data.pageSize) //跳过已加载页面的数据
      .limit(this.data.pageSize)  //每个页面限制数据数
      .where({
        tag: this.data.rankTag
      })
      .get({
        success: (res) => {
          // console.log(res)
          var that = this
          that.setData({
            goodsList: [...that.data.goodsList, ...res.data], //获取商品列表
            // total: res.data.length  //总共有多少条商品数据
          })
        },
        complete: () => {
          wx.hideLoading()
          this.setData({ isloading: false })

          cb && cb()  //采用一个回调函数的方式，关闭下拉刷新
        }
      })
    }else{
      // 从云请求数据
      db.collection('Goods')
      .orderBy('time', this.data.rankway)   // 默认按时间正序排列
      .skip((this.data.page-1)*this.data.pageSize) //跳过已加载页面的数据
      .limit(this.data.pageSize)  //每个页面限制数据数
      .get({
        success: (res) => {
          // console.log(res)
          var that = this
          that.setData({
            goodsList: [...that.data.goodsList, ...res.data], 
          })
        },

        complete: () => {
          wx.hideLoading()
          this.setData({ isloading: false })

          cb && cb()  //采用一个回调函数的方式，关闭下拉刷新
        }
      })
    }

    db.collection('Goods').get({
      success: (res) => {
        this.setData({
          total: res.data.length  //总共有多少条商品数据
        })
      }
    })
    
  },

  // 排序方式处理函数：通过更改rankway实现按时间排序（正/倒）
  rankway(){
    var that = this
    if(that.data.rankway == 'asc'){
      that.setData({
        rankAsTime: '按时间 降序',
        rankway: 'desc'
      })
    }else{
      that.setData({
        rankAsTime: '按时间 升序',
        rankway: 'asc'
      })
    }
    that.onPullDownRefresh()
  },

  TagSelect() {
    this.setData({
      isClassify: this.data.isClassify?false:true
    })
    
  },
  TagClassify: function(e){
    var that = this
    that.setData({
      rankTag: e.currentTarget.dataset.txt,
      isClassify: false
    })

    that.onPullDownRefresh()
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

    // 发布按钮的一些初始设置
    var that =this;
    wx.getSystemInfo({
      success: function (res) {
        // console.log(res);
        // 屏幕宽度、高度
        // console.log('height=' + res.windowHeight);
        // console.log('width=' + res.windowWidth);
        // 高度,宽度 单位为px
        that.setData({
          windowHeight:  res.windowHeight,
          windowWidth:  res.windowWidth,
          buttonTop:res.windowHeight*0.70,//这里定义按钮的初始位置
          buttonLeft:res.windowWidth*0.85,//这里定义按钮的初始位置
        })
      }
    })
  },
  //以下是按钮拖动事件
  buttonStart: function (e) {
    startPoint = e.touches[0]//获取拖动开始点
  },
  buttonMove: function (e) {
    var endPoint = e.touches[e.touches.length - 1]//获取拖动结束点
    //计算在X轴上拖动的距离和在Y轴上拖动的距离
    var translateX = endPoint.clientX - startPoint.clientX
    var translateY = endPoint.clientY - startPoint.clientY
    startPoint = endPoint//重置开始位置
    var buttonTop = this.data.buttonTop + translateY
    var buttonLeft = this.data.buttonLeft + translateX
    //判断是移动否超出屏幕
    if (buttonLeft+50 >= this.data.windowWidth){
      buttonLeft = this.data.windowWidth-50;
    }
    if (buttonLeft<=0){
      buttonLeft=0;
    }
    if (buttonTop<=0){
      buttonTop=0
    }
    if (buttonTop + 50 >= this.data.windowHeight){
      buttonTop = this.data.windowHeight-50;
    }
    this.setData({
      buttonTop: buttonTop,
      buttonLeft: buttonLeft
    })
  },
  buttonEnd: function (e) {
  },
  openAddPage: function(e) {
    wx.navigateTo({
      url: '/pages/Sale/Sale'
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    wx.setNavigationBarTitle({
      title: '二手交易'
    })
    this.getGoodsList()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    //下拉重置数据，重新请求
    this.setData({
      page: 1,
      goodsList:[],
      total: 0
    })
    this.getGoodsList( () => {
      wx.stopPullDownRefresh()
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
      //判断数据是否加载完毕
      if(this.data.page * this.data.pageSize >= this.data.total){
        //没有下一页数据了
        return wx.showToast({
          title: '数据加载完毕!',
          icon: 'none'
        })
    }

    //判断是否正在加载其他数据
    if(this.data.isloading) return

    // 页码值加一
    this.setData({
        page: this.data.page +1
    })
    this.getGoodsList()
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})